/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cliente.rmi_aux;

import cliente.GereOperacoes;
import cliente.gui.Erro;
import common.RespOut;
import java.rmi.RemoteException;

/**
 *
 * @author ziza
 */
public class ThreadPing extends Thread {

    GereOperacoes gestor;
    int tenta = 0;
    long tempoInicial;

    public ThreadPing(GereOperacoes gestor) {
        this.gestor = gestor;
    }

    public void run() {
        while (true) {
//            if (gestor.getConexao().getEstado().equalsIgnoreCase("Off")) {
//                System.out.println("A fazer loggout");
//                return;
//            }
            try {
                String estado = gestor.getConexao().getHandling().efectuaPing();
                if (estado.equalsIgnoreCase("Servidor ok")) {
                    gestor.getConexao().setEstado("Ligado");
                    synchronized (this) {
                        try {
                            this.sleep(5000);
                        } catch (InterruptedException ex2) {
                            System.out.println("[Erro]:" + ex2.getMessage());
                        }
                    }
                    tenta = 0;
                }
            } catch (RemoteException ex) {
                //A TRATAR <---------------------NAO ESQUECER
                System.out.println("[ERRO]Ligacao:Servidor down!\n" + ex.getMessage());
                synchronized (this) {
                    try {
                        this.sleep(5000);
                    } catch (InterruptedException ex2) {
                        System.out.println("[Erro]:" + ex2.getMessage());
                    }
                }
//                if (gestor.getConexao().getEstado().equalsIgnoreCase("Off")) {
//                    System.out.println("A fazer loggout");
//                    return;
//                }

                if (tenta == 0) {
                    tempoInicial = System.currentTimeMillis();
                    tenta++;
                    System.out.println("[ERRO]Remote:" + ex.getMessage());
                    new Erro("[Ligacao]", "Erro no envio dos dados!");
                }

//                RMIconnectionCliente handling=null;
//                gestor.getConexao().setHandling(handling);


                if (gestor.getConexao().conexao_RMI() != 0 /*|| !gestor.verificaTempo(tempoInicial)*/) {
//                    if (gestor.getConexao().getEstado().equals("Off")) {
//                        gestor.fazLogout();
//                        return;
//                    }
                    if (gestor.verificaTempo(tempoInicial)) {
                        gestor.fazLogout();
                        gestor.encenrraJanelasErro("Tempo de ligacao excedido!!!");
                        return;
                    }
                    gestor.getConexao().setEstado("Desligado");
                }
                else{
                    RespOut resposta=new RespOut(gestor.getNome(), "Para restabelecer", gestor.getNome());
                    gestor.mandaCredenciais(resposta);
                }
            }
        }
    }
}
